perm filename LISP2.SLI[S78,JMC] blob sn#356689 filedate 1978-05-26 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	.require "memo.pub[let,jmc]" source
C00004 ENDMK
C⊗;
.require "memo.pub[let,jmc]" source
.NOFILL

	%2alt x ← qif qn x ∨ qn qd x qthen x qelse qa x . alt qdd x%1

(DEFUN ALT (X) (COND
		((OR (NULL X) (NULL (CDR X))) X)
		(T (CONS (CAR X) (ALT (CDDR X))))
))

	alt[x] = [null[x] ∨ null[cdr[x]] → x; T → cons[car[x]; alt[cddr[x]]]


	%2alt%1 (A B C D E) = (A C E)
.skip to column 1
	%2mapcar[u,f] ← qif qn u qthen qnil qelse f[qa u] . mapcar[qd u,f]

	%2maplist[u,f] ← qif qn u qthen qnil qelse f[u] . maplist[qd u,f]

	%2diff[exp,var] ← qif qat exp qthen [qif exp = var qthen 1 qelse 0]
		qelse qif qa exp = PLUS qthen
			%1PLUS%2 . mapcar[qd exp, λx.diff[x,var]]
		qelse qif qa exp = %1TIMES%2 qthen
			%1PLUS%2.maplist[qd exp,λx. %1TIMES%2.maplist[qd exp,
λy.qif x = y qthen diff[qa y,var] qelse qa y]]

	diff[%1(TIMES X (PLUS X Y 3)), X] = (PLUS (TIMES 1 (PLUS X Y 3))
%1(TIMES X (PLUS 1 0 0)))